﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace BL.BIZControls
{
    public class BIZControlBase : UserControl, IContainedControl
    {
        public ControlContainerBase ContainerControl { get; set; }
        public HtmlControl FormScrollControll { get { return (HtmlControl)FindControl("formscroll"); } }
        public ModalContainer ModalContainerControl { get { return ContainerControl is ModalContainer ? (ModalContainer)ContainerControl : null; } }
        public PageContainer PageContainerControl { get { return ContainerControl is PageContainer ? (PageContainer)ContainerControl : null; } }
        protected bool InitLoaded { get { return ViewState["InitLoaded"] != null ? (bool)ViewState["InitLoaded"] : false; } set { ViewState["InitLoaded"] = value; } }

        public VisibleState ControlState { get { return ViewState["ControlState"] != null ? (VisibleState)ViewState["ControlState"] : VisibleState.Closed; } set { ViewState["ControlState"] = value; } }

        public bool HandleButtonClick { get { return ViewState["HandleButtonClick"] != null ? (bool)ViewState["HandleButtonClick"] : false; } set { ViewState["HandleButtonClick"] = value; } }
        public delegate void ButtonClickEventHandler(object sender, Guid objectId, string objectType, string commandName);
        /// <summary>
        /// Överta knapptryck i kontrollen och hantera de eventen själv
        /// </summary>
        public event ButtonClickEventHandler HandledButtonClick;


        /// <summary>
        /// När kontrollen använder tabbar så ska scrollblocket vara kortare så det får plats i en popup
        /// </summary>
        public bool SetTabSize { get { return ViewState["SetTabSize"] != null ? (bool)ViewState["SetTabSize"] : false; } set { ViewState["SetTabSize"] = value; } }

        /// <summary>
        /// När kontrollen använder Sub NavBar så ska scrollblocket vara kortare så det får plats i en popup
        /// </summary>
        public bool SetSubNavSize { get { return ViewState["SetSubNavSize"] != null ? (bool)ViewState["SetSubNavSize"] : false; } set { ViewState["SetSubNavSize"] = value; } }


        /// <summary>
        /// Det här styr om editering, lägg till ..., val möjligheter mm är aktiverade
        /// </summary>
        public bool ReadOnly { get { return ViewState["ReadOnly"] != null ? (bool)ViewState["ReadOnly"] : false; } set { ViewState["ReadOnly"] = value; } }

        /// <summary>
        /// Trigga eventet för hanterade knapptryck
        /// </summary>
        /// <param name="sender">Controllen</param>
        /// <param name="objectId">ID till det objekt (tex UserID) som är kopplat till eventet</param>
        /// <param name="objectType">Objekttypen som id't tillhör</param>
        /// <param name="commandName">Namn på funktion som sker vid knapptryck tex OPENUSER. Kontrollen bör ha konstanter som motsvarar alla de knappevent som finns</param>
        protected void CallHandledButtonClick(object sender, Guid objectId, string objectType, string commandName )
        {
            if (HandleButtonClick)
            {
                if (HandledButtonClick != null)
                {
                    HandledButtonClick(sender, objectId, objectType, commandName);
                }
            }
        }
    }
}
